It has become commonplace to use so-called “server farms” of numerous processing devices coupled by one or more networks to perform a task by assigning multiple portions of that task among multiple ones of the processing devices to perform those portions in parallel. However, such commonplace practices entail a granularity of assignment of task portions that is only per processing device. Thus, each task portion is assigned to an entire computing device, and each processing device is entirely devoted to only the one task portion that is assigned to it.
Achieving a finer degree of granularity in assigning task portions to individual processor components and/or individual cores of processor components within a processing device has been possible by incorporating a scheduling routine into a routine that implements the logic of a task portion that is assigned to a processing device. However, this requirement of including a scheduling routine within a task portion to achieve such granularity requires some amount of knowledge of the particular configuration of processor component(s) of the processing device to enable effective assignment of subparts, adding an undesired burden for those writing the code for each task. In particular, in processing devices having a base processor component accompanied by multiple co-processor components, the scheduling routine must often be compiled specifically to be executed by the base processor component, and the portions of the routine implementing the logic of the subparts of a task portion must be compiled specifically for the co-processor components.
Further, the fact of each processing device being devoted entirely to only one task portion is often wasteful of available processing resources within at least some of the processing devices, as it is seldom the case that each task portion is able to be tailored to make effective use of all of the cores within each the processing devices. This inevitably results in the use of more of the processing devices to perform each task, thereby depriving other tasks of the opportunity to make use of those processing devices. Further, such inefficient use of processing and/or other resources of the processing devices ultimately results in a considerable waste of electric power.